/* Universidad del Valle de Guatemala
 * CC2003 - Algoritmos y Estructuras de Datos
 * PROYECTO #1: RURPLE ME
 * Fecha de Entrega: Jueves 11 de Agosto de 2011
 */

/**
 * Clase que permite el despliegue de una pantalla de bienvenida al iniciar la aplicacion.
 * @author Jose Antonio Bagur (10275), Luis Antonio Siguenza (10297) y Emilo Jose Miranda (10411).
 */

/* SE CARGAN LOS PAQUETES A UTILIZAR EN LA CLASE */
import java.util.*;
import javax.microedition.lcdui.*;

/* SE HEREDAN LOS MÉTODOS Y ATRIBUTOS DEL PAQUETE CANVAS */
public class BienvenidaRurple extends Canvas {
    
    /* ATRIBUTOS DE LA CLASE BIENVENIDARURPLE */
    
    private Display bienvenida;
    private Displayable proxima;
    private Timer timer; 
    
    /* MÉTODOS DE LA CLASE BIENVENIDARURPLE */
    
    /**
     * Metodo que permite el despligue de la pantalla de bienvenida en la aplicacion.
     * @param display pantalla de bienvenida.
     * @param proxima siguiente pantalla.
     */
    public BienvenidaRurple(Display bienvenida, Displayable proxima) {
        timer = new Timer();
        this.bienvenida = bienvenida;
        this.proxima = proxima;
        bienvenida.setCurrent(this);  
    }
    
    /**
     * Metodo que permite finalizar la ejecucion de la pantalla de bienvenida.
     */
    private void terminarPantalla() {
        timer.cancel();
        bienvenida.setCurrent(proxima);
    }
    
    /**
     * Metodo que permite obtener el ingreso de una tecla por parte del usuario.
     * @param keyCode codigo de la tecla ingresada por el usuario.
     */
    protected void keyPressed(int keyCode) {
        terminarPantalla();
    }
    
    /**
     * Metodo que permite la creacion del timer al iniciar la aplicacion.
     */
    protected void showNotify() {
        timer.schedule(new CountDown(), 5000);                                  // INICIA AUTOMÁTICAMENTE AL COLOCARSE EL CANVAS EN PANTALLA
    }
    
    /**
     * Metodo que permite la creacion de la pantalla de bienvenida al inicio de la aplicacion.
     * @param g graficos.
     */
    public void paint (Graphics g) {
        Image bienvenida =null;                                                                                            // SE INICIALIZA LA IMAGEN 
        g.fillRect(0, 0, getWidth(), getHeight());
        g.setColor(255, 255, 255);
        
        try {
            bienvenida = Image.createImage("/Splash.png");
        } catch (Exception e) {
            System.err.println("ERROR: " + e);
        }
        g.drawImage(tamañoImagen(bienvenida, this.getWidth(), this.getHeight()), 0, 0, Graphics.TOP | Graphics.LEFT);
    }
    
    /**
     * Metodo que permite cambiar el tamaño de las imagenes a desplegar en pantalla, adecuadas al tamaño de esta.
     * @param image imagen a desplegar en pantalla.
     * @param ancho de la pantalla.
     * @param alto de la pantalla.
     * @return imagen con el nuevo tamaño calculado.
     */
    private Image tamañoImagen(Image image, int ancho, int alto) {
        int anchoImagen = image.getWidth();
	int altoImagen = image.getHeight();
	
	Image newImage = Image.createImage(ancho, alto);
        Graphics g = newImage.getGraphics();
        
        for(int y = 0; y < alto; y++) {
            for(int x = 0; x < ancho; x++) {
                g.setClip(x, y, 1, 1);
                int dx = ((x * anchoImagen) / (ancho));
                int dy = ((y * altoImagen) / (alto));
                g.drawImage(image, x - dx, y - dy, Graphics.LEFT | Graphics.TOP);
            }
        }
		
        return Image.createImage(newImage);
    }
    
    /**
     * Clase interna que permite el manejo del timer implementado en la pantalla de bienvenida.
     */
    private class CountDown extends TimerTask {
        
        /**
         * Metodo que permite finalizar la ejecucion de la pantalla de bienvenida.
         */
        public void run() {
            terminarPantalla();
        }
    } // FIN DE LA CLASE INTERNA COUNTDOWN
} // FIN DE LA CLASE BIENVENIDARURPLE